package pers.bbw.crr.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import pers.bbw.crr.dao.SiteMapper;
import pers.bbw.crr.dto.SiteSearchDto;
import pers.bbw.crr.entity.Site;
import pers.bbw.crr.service.SiteService;
import pers.bbw.crr.util.FileUtil;

import javax.annotation.Resource;
import java.util.Date;

/**
 * siteService业务层处理
 *
 * @author bbw
 * @date 2024-12-13
 */
@Service
public class SiteServiceImpl implements SiteService {

    @Resource
    private SiteMapper siteMapper;

    /**
     * 查询site
     * @author 白博文 0205
     * @param id site主键
     * @return site
     */
    @Override
    public Site selectSiteById(int id) {
        return siteMapper.selectSiteById(id);
    }

    /**
     * 查询site列表
     * @author 白博文 0205
     * @param site site
     * @return site
     */
    @Override
    public PageInfo<Site> selectSiteList(SiteSearchDto dto) {
        Site site = new Site();
        BeanUtil.copyProperties(dto, site);
        PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
        PageInfo<Site> sitePageInfo = new PageInfo<>(siteMapper.selectSiteList(site));
        return sitePageInfo;
    }

    /**
     * 新增site
     * @author 白博文 0205
     * @param site site
     */
    @Override
    public void insertSite(Site site, MultipartFile file) {
        saveAndUpload(site, file);
    }

    /**
     * 修改site
     * @author 白博文 0205
     * @param site site
     * @return 结果
     */
    @Override
    public void updateSite(Site site, MultipartFile file) {
        saveAndUpload(site, file);
    }

    /**
     * 批量删除site
     * @author 白博文 0205
     * @param ids 需要删除的site主键
     * @return 结果
     */
    @Override
    public int deleteSiteByIds(int[] ids) {
        return siteMapper.deleteSiteByIds(ids);
    }

    /**
     * 删除site信息
     * @author 白博文 0205
     * @param id site主键
     * @return 结果
     */
    @Override
    public int deleteSiteById(int id) {
        return siteMapper.deleteSiteById(id);
    }

    /**
     * @author 白博文 0205
     * @param site
     * @param file
     */
    private void saveAndUpload(Site site, MultipartFile file) {
        if (site.getId() == null) {//新增
            if (file != null) {
                String createFileUrl = FileUtil.upload(file);
                site.setFileUrl(createFileUrl);
            }
            site.setCreateTime(new Date());
            siteMapper.insertSite(site);
        } else {//修改
            String fileUrl = siteMapper.selectFileUrlById(site.getId());
            if (StrUtil.isNotEmpty(fileUrl)) {//原图片不为空
                FileUtil.delete(fileUrl);
            }
            if (file != null) {
                String updateFileUrl = FileUtil.upload(file);
                site.setFileUrl(updateFileUrl);
            }
            site.setUpdateTime(new Date());
            siteMapper.updateSite(site);
        }
    }
}
